﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtocoloNameSpace;

namespace HTSwitchServerNamespace.Protocols
{
    public class Protocol_GenericGps : IProtocol
    {

        #region Metodos
        public bool ObteneryEnviarDatosDelDispositivo(string strMensajeDelDispositivo)
        {
            ///DECLARACION DE VARIABLES
            HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS objDatosGPS = new HTSwitchServerNamespace.ar.com.horsetrack.DatosGPS();
            ControlHorseData objContext = new ControlHorseData();            
            ar.com.horsetrack.HorsetrackWebService webServiceHandler = new ar.com.horsetrack.HorsetrackWebService();
            ar.com.controlyseguimiento.www.ControlYSeguimiento objContextControl = new ar.com.controlyseguimiento.www.ControlYSeguimiento();
           
            ///INICIO DEL CUERPO DEL PROGRAMA
            ///

            string[] strArrFields = strMensajeDelDispositivo.Split(new char[] { ',' });
            //Ejemplo GPS VALIDO:// 354779035057430,05*827,000,PT35,V,0000.0000,N,00000.0000,E,000.0,000.0,00.0,12:52:00 22-02-12,1.24,98,2D,,
            //EJEMPLO GPS VALIDDO:// 354779035105429,05*827,000,PT35,A,3431.2149,S,05829.1326,W,001.3,005.2,04.5,11:42:36 15-05-12,1.26,76,19,,,
            if (strArrFields[4] == "A") //Es valido
            {
                CLogger.Append("GENERIC GPS Mensaje Valido - IMEI: " + strArrFields[0], CLogger.INFO);
                try
                {
                    if (objContext.verificarDatosRecibidos(strArrFields))
                    {
                        objDatosGPS = objContext.obtenerDatosGPS(strArrFields); //FD v1.00.01                          
                    }
                    else
                    {
                        throw new Exception("GENERIC GPS Coordenadas GPS Incorrectas");
                    }
                }
                catch (Exception ex)
                {
                    CLogger.Append("GENERIC GPS Excepcion: " + ex.Message, CLogger.ERROR);
                    throw ex;
                }
            }
            else
            {
                CLogger.Append("GENERIC GPS Mensaje Invalido " + strArrFields[4], CLogger.INFO);
                objDatosGPS = null;
                return false;

            }

            //////////////////////////////////////////////////NEW PLATFORM ///////////////////////////////////
            try
            {
                if ((objDatosGPS != null)&&(objDatosGPS.Email!=null)&&(objDatosGPS.Email!="Not defined") && (objDatosGPS.dbLatitud != null) && (objDatosGPS.dbLongitud != null))
                {                   

                    CLogger.Append("*************************NEW PLATFORM********************", CLogger.INFO);

                    #region Validar Nueva plataforma

                    if (objContextControl.ValidateImei(objDatosGPS.strImei) == true)
                    {
                        //CLogger.Append("Imei encontrado:" + objGPSAndroidData.IMEI, CLogger.INFO);

                        if (objContextControl.IsFirstTimeActivation(objDatosGPS.Email) == true)  //AVERIGUA SI ES PRIMERA VES PARA ACTIVAR
                        {
                            if (objContextControl.FirstTimeActivation(objDatosGPS.strImei, objDatosGPS.Email) == true)  //ACTIVA POR PRIMERA VEZ
                            {
                                CLogger.Append("**NEW PLATFORM** GENERIC GPS Se activa por primera vez el usuario: " + objDatosGPS.Email + " con IMEI:" + objDatosGPS.strImei, CLogger.INFO);
                                //CLogger.Append("NOKIA Actualizando usuario con IMEI:" + objDatosGPS.IMEI, CLogger.INFO);
                                objContextControl.UpdateCoordinates(objDatosGPS.strImei,
                                                                    objDatosGPS.Email,
                                                                    objDatosGPS.dbLatitud.ToString(),
                                                                    objDatosGPS.dbLongitud.ToString(),
                                                                    "0",
                                                                    "0",//objDatosGPS.Alt,
                                                                    objDatosGPS.strSpeed,
                                                                    objDatosGPS.strBattery
                                                                    );
                                CLogger.Append("**NEW PLATFORM** GENERIC GPS Actualizo correctamente - Mail: " + objDatosGPS.Email + " - IMEI:" + objDatosGPS.strImei, CLogger.INFO);
                            }

                        }
                        else
                        {              //IMEI CORRECTO

                            objContextControl.UpdateCoordinates(objDatosGPS.strImei,
                                                                    objDatosGPS.Email,
                                                                    objDatosGPS.dbLatitud.ToString(),
                                                                    objDatosGPS.dbLongitud.ToString(),
                                                                    "0",
                                                                    "0",//objDatosGPS.Alt,
                                                                    objDatosGPS.strSpeed,
                                                                    objDatosGPS.strBattery
                                                                    );
                            CLogger.Append("**NEW PLATFORM** GENERIC GPS Actualizo correctamente - Mail: " + objDatosGPS.Email + " - IMEI:" + objDatosGPS.strImei, CLogger.INFO);

                        }
                    }
                    else
                    {
                        CLogger.Append("**NEW PLATFORM** IMEI INVALIDO - IMEI:" + objDatosGPS.strImei, CLogger.INFO);

                    }
                    #endregion
                }
                else
                {
                    CLogger.Append("**NEW PLATFORM** GENERIC GPS DATOS NULL", CLogger.ERROR);
                    return false;
                }
            }
            catch (Exception ex)
            {
                //throw new Exception("ERROR EN VALIDACION O CREACION DE NUEVO USUARIO" + objGPSAndroidData.Mail);
                CLogger.Append("**NEW PLATFORM** GENERIC GPS ERROR Excepcion EN NUEVO VALIDATE: " + ex.Message, CLogger.ERROR);
            }


 ////////////////////////////////////////////////////////////////////PLATAFORMA VIEJA ///////////////////////////////////////7//

            if (webServiceHandler.actualizarDatosGPSenDB(objDatosGPS) == true)  //ACTUALIZACION DATOS EN PLATAFORMA HORSETRACK
            {
                CLogger.Append("**OLD PLATFORM** GENERIC GPS DATOS ACTUALIZADOS CORRECTAMENTE OK", CLogger.ERROR);
            }
            else
            {
                throw new Exception("**OLD PLATFORM** GENERIC GPS NO SE PUDO ACTUALIZAR LA DB DE HORSETRACK");
            }

            return true;
        }
        #endregion


        public ar.com.horsetrack.DatosGPS Parse(DataMocks.DataMockMgr mockObject)
        {
            throw new NotImplementedException();
        }
    }
}
